Анализ А/B-тестирования

Необходимо провести корректность проведения и оценку результатов A/B-теста для проверки новой рекомендательной системы.

Техническое задание

1) конверсии в просмотр карточек товаров — событие product_page

2) просмотры корзины — product_cart

3) покупки — purchase.

Предобработка данных

Загрузка и дубликаты

Загрузим датасеты и сразу посмотрим на дубликаты в них.

Полных дубликатов нет, посмотрим на скрытые дубликаты. Датасет events проверять не буду, он маленький и его проще будет посмотреть глазами.

Скрытых дубликатов нет.

Пропуски

Пропуски есть в столбце details датасета actions.

Посмотрим на срез по незаполненным строкам, узнаем какие события им соответствуют.

Здесь отсутствуют события purchase. Узнаем, в заполненных строках остался только этот тип событий?

Всё так. Все заполненные строки соответствуют событию purchase, это стоимость покупки в долларах. Других данных в этом столбце нет. Не вижу смысла заполнять в этом случае пропуски.

Корректировка форматов данных

Скорректируем форматы данных. Корректировка необходима столбцам event_dt датасета actions и first_date датасета all_new_users.

Проверка на соответствие ТЗ

Есть следующие условия теста:

Дата запуска: 2020-12-07;

Дата остановки набора новых пользователей: 2020-12-21;

Дата остановки: 2021-01-04;

Аудитория: 15% новых пользователей из региона EU;

Назначение теста: тестирование изменений, связанных с внедрением улучшенной рекомендательной системы;

Ожидаемое количество участников теста: 6000.

Также, нужно проверить, не совпадает ли время теста в маркетинговыми активностями.

Набор пользователей пришёлся на период между двумя событиями - "Черной пятницей" и Рождеством. А вот срок проведения как раз попадает на второе из них. Возможно, стоит исключить данные по пользователям, совершавшим действия в этот период, то есть зарегистрированным до 11 декабря включительно, но тогда количество пользователей может быть ниже требуемого. При подсчёте количества пользователей это проверим.

Далее проверим пересечение пользователей, отобранных для теста системы рекомендаций и теста интерфейса для польщователей из Европы.

Пользователей, участвующих в двух тестах немного больше 1500, если их исключить, то необходимо количество пользователей не будет набрано. Также, возвращаясь к исключению пользователей по датам регистрации, возникает та же проблема: исключив пользователей за такой большой период, мы не наберём их необходимое число.

Теперь узнаем количество пользователей, входящих в две группы теста.

Здесь пересечений нет. Но стоит отметить, что размер контрольной группы заметно больше, чем группа подопытных. Это может влять на результаты теста, учтём это дальше.

И чтобы окончательно убедиться, что пользователи не задвоены, сделаем ещё 1 проверку.

Всё хорошо.

Чтобы проверить, все ли пользователи из тестовых групп относятся к региону EU, создадим профили пользователей.

Для начала проверим регион.

Просто уберём лишних пользователей и посмотрим, соответствуют ли даты регистрации пользователей ТЗ.

Даты соответствуют. Посчитаем процент пользователей, участвующих в тестировании от общего числа пользователей из Европы, зарегистрированных в том же периоде.

По этому показателю проходим ровно по величине, установленной ТЗ.

Промежуточный вывод

В целом, Количество собранных данных соответствует ТЗ: количество пользователей, участвующих в тестировании более 6000, они составляют ровно 15% от всех новых пользователей в регионе EU. Даты привлечения соответствуют требуемым.

Стоит отметить два момента:

Постараемся учесть это в дальнеёшем анализе.

Исследовательский анализ

Подготовка данных

Для начала вычленим действия пользователей, соответствующие нашей тестовой группе и добавим информацию о группе и дате регистрации пользователя.

Для каждого действия посчитаем количество времени, прошедшее с даты регистрации пользователя и отсеем те, которые сделаны более 14 дней после регистрации.

Исключили 800 штук.

Думаю, можно приступать к анализу.

Анализ количества событий

Итого, из 6351 пользователя, попавшего в тестовую группу, только 3481 совершили хотя бы одно действие. Всего ими сделано 22620 действий, в среднем 6,5 на человека.

Посмотрим на распределение действий во времени.

До 13 числа количество действий пользователей довольно стабильно. 14 декабря происходит резкий всплеск активности с повышением до пика 21 декабря. После этого количество действий идёт на спад.

Посмотрим на распределение действий по пользователям.

На графике много провалов, но отдалённо угадывается "колокол" нормального распределения с пиком на 6 действиях на 1 пользователя. В целом очень больших выбросов я не вижу, считаю, что исключать данные не нужно.

Посмотрим всё описанное выше в разрезе групп.

Увеличилась разница между группами. Активных пользователей в контрольной группе на 1700 больше. И действий они генерируют тоже больше - около 80% всех действий сделано пользователями контрольной группы, в среднем 6,8 действий на пользователя против 5,5 у подопытной группы.

Заметно, что основную массу действий сгенерировали пользователи из тестовой группы, форма графика сильно похожа на общий график. У подопытной группы и порядок чисел меньше и количество действий распределено более равномерно, но также поле 21 декабря идёт спад.

У обеих групп пользователей распределение похоже и в целом повторяет форму общего графика.

Анализ воронки событий

Сначала посмотрим общую информацию по распределению событий по типам.

Всего четыре вида событий: авторизация, открытие страницы товара, открытие корзины, и завершение покупки.

Больше всего раз пользователи авторизовались - это событие занимает почти половину всех событий за исследуемый период.

Что занятно, событие завершения покупки сделано больше раз, чем переход в корзину. Судя по всему, у пользователей есть возможность оплачивать товар без посещения корзины.

Посмотрим на количество пользователей по событиям. Сразу посчитаем долю от всех зарегистированных пользователей.

После регистрации авторизовалась немного больше половины пользователей. Треть от общего числа посмотрела карточку товара, 16 процентов просмотрело корзину и немного больше, 17% завершило покупку.

Рассмотрим ту же воронку в разрезе групп.

Хорошо заметно, что в подопытной группе доля пользователей, авторизовавшихся в система в два раза меньше, чем у контрольной. Но при этом пользователи переходят по цепочке действий очень похожим образом. Доли пользователей, переходящих на следующий этап практически те же.

Промежуточный вывод

В среднем, немногим больше половины пользователей (54.79%) тестовой группы авторизовались в системе после регистрации. Если смотреть по группам, различия между ними только усиливаются: из 3824 пользователей группы А хотя бы один раз авторизовалось 2604, около 70%, в то время как из 2877 пользователей группы В авторизовалось только 876, только треть.

Но при этом, авторизовавшиеся пользователи ведут себя похожим образом: и распределение действий по пользователям между группами похожее и доли перехода по цепочке действий в приложении практически совпадают.

Оценка результатов A/B-тестирования

Составим функцию для расчета p_value.

Сразу примем уровень значимости равным 0,05, но стоит учесть, что при сравнении групп мы будем проводить сравнение 4 раза - для каждого события в цепочке, чтобы снизить вероятность ошибки, предлагаю скорректировать его по методу Шидака.

Приступим к сравнению двух наших групп. Нулевая гипотеза для проверки - доли пользователей, совершивших определённое действие для групп А и В не различается.

Промежуточный вывод

Можно с уверенностью сказать, что тест не достиг ожидаемого эффекта. Конверсия подопытной группы не только не увеличилась, но сильно снизилась по отношению к тестовой группе по всем интересующим нас действиям, а нулевое p-значение по всем проверкам только подтверждает это.

Общий вывод

В целом, пользователи в тестовых группах ведут себя похоже за одним исключением - пользователи из группы подопытных намного реже авторизуются в системе, в связи с чем генерируют заметно меньше действий.

Тестирование новой рекомендательной системы не достигло ожидаемого результата - вместо роста конверсии зарегистрированных пользователей видно сильно её снижение.

При этом, несмотря на формально соответствие ТЗ, считать тест проведённым корректно я не могу. На результат могло повлиять несколько факторов:

Рекомендую пересмотреть время проведения и подход к набору пользователей в тестовую группу, после чего провести повторное тестирование.